package create_pattern.build_pattern.builder_pattern;
/**
 * 建造者模式是较为复杂的创建形模式，
 * 它将客户端与包含多个组成部分的复杂对象的创建过程分离，
 * 客户端无须知道复杂对象的内部组成部分与装配方式，
 * 只需要知道所需的建造者类型即可
 *
 * 定义：将一个复杂对象的构建与它的表示分离，使得同样的构建过程可以创建不同的表示。
 */
public class MainBuild {
    public static void main(String[] args) {
        Actor actor = new ActorController().construct(new AngleBuilder());
    }
}

/**
 * 优点
 * 1.在建造者模式中，客户端不必知道产品内部组成的细节，将产品本身与产品的创建过程解耦，
 * 使得相同的创建过程可以创建不同的产品对象。
 *
 * 2.每个具体建造者都相对独立 ，而与其他具体建造者无关，因此，可以很方便地替换具体建造者或增加新的具体建造者，
 * 用户使用不同的具体建造者即可得到不同的产品对象。
 *
 * 3.可以更加精细地控制产品的创建过程，
 *
 * 缺点
 * 1.建造者模式所创建的产品一般具有较多的共同点，其组成部分相似。
 *
 * 2.如果产品的内部结构复杂且多变 ，可能会需要定义很多具体建造者类来实现这种变化，
 * 这就导致系统变得很庞大，增加系统的理解程度和运行成本。
 *
 *
 * 适用场景
 * 1. 需要生产的产品对象有复杂的内部结构，这些产品对象通常包含多个成员变量
 *
 * 2.需要生产的产品对象的属性相互依赖，需要指定其生成顺序。
 *
 * 3.对象的创建过程独立于创建该对象的类
 *
 * 4.隔离复杂对象的创建和使用，并使得相同的创建过程可以创建不同的产品
 */
